/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package DAO;

import Principals.Constantes;
import Model.Empleado;
import Model.Perfil;
import Presenter.UsuarioPresenter;
import Principals.Main;
import java.util.ArrayList;
import java.util.List;
import org.hibernate.Query;

/**
 *
 * @author Paquete
 */
public class EmpleadoDAO {

    public static void registrarEmpleado(Empleado nuevo_empleado) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.save(nuevo_empleado);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "empleado", nuevo_empleado.getIdEmpleado() + "->" + nuevo_empleado.getApellidoPaterno() + " " + nuevo_empleado.getApellidoMaterno() + " " + nuevo_empleado.getNombres(), Constantes.LOG_INSERT);
        }
    }
    
    public static Empleado registrarEmpleadoSimulacion(Empleado nuevo_empleado) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.save(nuevo_empleado);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
        }finally{
            UsuarioPresenter.registrarLogUsuario(Main.usr, "empleado", nuevo_empleado.getIdEmpleado() + "->" + nuevo_empleado.getApellidoPaterno() + " " + nuevo_empleado.getApellidoMaterno() + " " + nuevo_empleado.getNombres(), Constantes.LOG_INSERT);
        }
        return nuevo_empleado;
    }

    public static List<Empleado> empleadosDisponibles(){
        List<Empleado> lstEmpleados = new ArrayList<Empleado>();
        Empleado objEmpleado = new Empleado();
        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery( "from Empleado where estado = 1"); 
        lstEmpleados = query.list();
        Main.usrSesion.session.getTransaction().commit();
        return lstEmpleados;
    }

    public static List<Empleado> buscarEmpleado(String nombre, String apPaterno, String apMaterno, String docIdentidad, int estado) {
        String q = "from Empleado where estado!=0 ";

        if (nombre != null) {
            q += " AND  lower(nombres) LIKE lower(:nombres) ";
        }
        if (apPaterno != null) {
            q += " AND lower(apellido_paterno) LIKE lower(:apPaterno) ";
        }
        if (apMaterno != null) {
            q += " AND lower(apellido_materno) LIKE lower(:apMaterno) ";
        }
        if (docIdentidad != null) {
            q += " AND lower(nro_documento) LIKE lower(:docIdentidad) ";
        }
        if (estado!=0){
           q += " AND estado = :estado ";
        }

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        if (nombre != null) {
            query.setParameter("nombres", "%" + nombre + "%");
        }
        if (apPaterno != null) {
            query.setParameter("apPaterno", "%" + apPaterno + "%");
        }
        if (apMaterno != null) {
            query.setParameter("apMaterno", "%" + apMaterno + "%");
        }
        if (docIdentidad != null) {
            query.setParameter("docIdentidad", "%" + docIdentidad + "%");
        }
        if (estado != 0) {
            query.setParameter("estado", estado);
        }
        Main.usrSesion.session.getTransaction().commit();

        return query.list();
    }
    
    public static Empleado cargarEmpleado(int idEmpleado) {
        String q = "from Empleado where id=:id";

        Main.usrSesion.session.beginTransaction();
        Query query = Main.usrSesion.session.createQuery(q);
        query.setParameter("id", idEmpleado);
        Empleado e = (Empleado) query.uniqueResult();
        Main.usrSesion.session.getTransaction().commit();
        return e;
    }

    public static void modificarEmpleado(Empleado e) {
        try {
            Main.usrSesion.session.beginTransaction();
            Main.usrSesion.session.update(e);
            Main.usrSesion.session.getTransaction().commit();
        } catch (Exception error) {
            System.out.println("MENSAJE DE ERROR:" + error);
        } finally {
            UsuarioPresenter.registrarLogUsuario(Main.usr, "empleado", e.getIdEmpleado() + "->" + e.getApellidoPaterno() + " " + e.getApellidoMaterno() + " " + e.getNombres(), Constantes.LOG_UPDATE);
        }
    }
    public static Empleado existeDocId(String docId) {
        try{
            String q = "from Empleado where nro_documento=:docId";

            Main.usrSesion.session.beginTransaction();

            Query query = Main.usrSesion.session.createQuery(q);
            query.setParameter("docId", docId);
            Empleado c = (Empleado) query.uniqueResult();
            Main.usrSesion.session.getTransaction().commit();
             return c;        
        } 
        catch (Exception e) {
            System.out.println("MENSAJE DE ERROR:" + e);
            return null;
        }
        
    }    
}
